﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Pulsar.ClienteWcf.Dominio;
using System.Data.SqlClient;


namespace Pulsar.ClienteWcf.Persistencia
{
   public class ClienteDAO
    {
        public Cliente Crear(Cliente clienteACrear)
       {

                Cliente clienteCreado = null;
                string sql = "INSERT INTO PLS_TB_USUARIO VALUES (@id, @nom, @ape_pa, @ape_ma, @dni, @dir, @pass, @tipo)";
                using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
                {
                    con.Open();
                    using (SqlCommand com = new SqlCommand(sql, con))
                    {
                        com.Parameters.Add(new SqlParameter("@id", clienteACrear.id_cliente));
                        com.Parameters.Add(new SqlParameter("@nom", clienteACrear.Nombre));
                        com.Parameters.Add(new SqlParameter("@ape_pa", clienteACrear.Ap_paterno));
                        com.Parameters.Add(new SqlParameter("@ape_ma", clienteACrear.Ap_materno));
                        com.Parameters.Add(new SqlParameter("@dni", clienteACrear.dni));
                        com.Parameters.Add(new SqlParameter("@dir", clienteACrear.dir));
                        com.Parameters.Add(new SqlParameter("@pass", clienteACrear.password));
                        com.Parameters.Add(new SqlParameter("@tipo", clienteACrear.tipo_usu));
                        com.ExecuteNonQuery();

                    }
                }
                clienteCreado = Obtener(clienteACrear.id_cliente);
                return clienteCreado;
            
            

        }

        public Cliente Obtener(string idcliente)
        {
            Cliente clienteEncontrado = null;
            string sql = "SELECT *  FROM PLS_TB_USUARIO WHERE id_usuario=@id";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@id", idcliente));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            clienteEncontrado = new Cliente()
                            {
                                
                                id_cliente = (string)resultado["id_usuario"],
                                Nombre = (string)resultado["nombre"],
                                Ap_paterno = (string)resultado["ape_paterno"],
                                Ap_materno = (string)resultado["ape_materno"],
                                dni = (string)resultado["dni"],
                                dir = (string)resultado["direccion"],
                                password = (string)resultado["pass_usu"],
                                tipo_usu = int.Parse(resultado["tipo_usuario"].ToString())
                                
                            };
                        }
                    }

                }
            }

            return clienteEncontrado;
        }

        public Cliente Modificar(Cliente clienteAModificar)
        {
            Cliente clienteModificado = null;
            string sql = "UPDATE PLS_TB_USUARIO SET nombre=@nom, ape_paterno=@ape_pa, ape_materno=@ape_ma, dni=@dni, direccion=@dir, pass_usu=@pass, tipo_usuario=@tipo WHERE id_usuario=@id";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                { 
                  
                    com.Parameters.Add(new SqlParameter("@id", clienteAModificar.id_cliente));
                    com.Parameters.Add(new SqlParameter("@nom", clienteAModificar.Nombre));
                    com.Parameters.Add(new SqlParameter("@ape_pa", clienteAModificar.Ap_paterno));
                    com.Parameters.Add(new SqlParameter("@ape_ma", clienteAModificar.Ap_materno));
                    com.Parameters.Add(new SqlParameter("@dni", clienteAModificar.dni));
                    com.Parameters.Add(new SqlParameter("@dir", clienteAModificar.dir));
                    com.Parameters.Add(new SqlParameter("@pass", clienteAModificar.password));
                    com.Parameters.Add(new SqlParameter("@tipo", clienteAModificar.tipo_usu));
                    com.ExecuteNonQuery ();
                     
                }
            }
            clienteModificado = Obtener(clienteAModificar.id_cliente);
            return clienteModificado;
        }

        public void Eliminar(Cliente clienteAEliminar)
        {
            string sql = "DELETE FROM PLS_TB_USUARIO WHERE id_usuario=@id";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@id", clienteAEliminar.id_cliente));
                    com.ExecuteNonQuery();
                }
            }
        }

        public List<Cliente> ListarTodos()
        {
            List<Cliente> Listado = new List<Cliente>();
            string sql = "SELECT * FROM PLS_TB_USUARIO";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            { 
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            Cliente cliente = new Cliente()
                            {
                                id_cliente = (string)resultado["id_usuario"],
                                Nombre = (string)resultado["nombre"],
                                Ap_paterno = (string)resultado["ape_paterno"],
                                Ap_materno = (string)resultado["ape_materno"],
                                dni = (string)resultado["dni"],
                                dir = (string)resultado["direccion"],
                                password = (string)resultado["pass_usu"],
                                tipo_usu = int.Parse(resultado["tipo_usuario"].ToString())
                            };
                            Listado.Add(cliente);
                        }
                    }
                }
            }
            return Listado;
        }
    }
}